// doctor.js - 医护人员专属功能

/**
 * 模拟菜单数据 - 基于用户角色的权限菜单配置
 * 定义不同角色用户可访问的功能模块和菜单项
 * 包含菜单图标、标题、描述等信息
 */
window.mockMenus = {
    /**
     * 系统管理员菜单
     * 包含用户管理、权限管理、系统配置等管理功能
     */
    admin: [
        { 
            icon: 'fa-users',                    // 菜单图标
            title: '用户管理',                   // 菜单标题
            desc: '管理系统用户'                 // 菜单描述
        },
        { 
            icon: 'fa-shield-alt',               // 菜单图标
            title: '权限管理',                   // 菜单标题
            desc: '配置用户权限'                 // 菜单描述
        },
        { 
            icon: 'fa-cogs',                     // 菜单图标
            title: '系统配置',                   // 菜单标题
            desc: '调整系统各项参数'             // 菜单描述
        }
    ],
    
    /**
     * 物资管理人员菜单
     * 包含急救车物资配置、物资信息管理、库存管理等专业功能
     */
    manager: [
        { 
            icon: 'fa-ambulance',                // 菜单图标
            title: '急救车物资配置',             // 菜单标题
            desc: '配置和管理急救车物资'         // 菜单描述
        },
        { 
            icon: 'fa-boxes',                    // 菜单图标
            title: '物资信息管理',               // 菜单标题
            desc: '管理物资信息和有效期'         // 菜单描述
        },
        { 
            icon: 'fa-warehouse',                // 菜单图标
            title: '物资库存管理',               // 菜单标题
            desc: '管理物资库存和预警'           // 菜单描述
        },
        { 
            icon: 'fa-truck-loading',            // 菜单图标
            title: '急救车补充管理',             // 菜单标题
            desc: '补充急救车物资'               // 菜单描述
        },
        { 
            icon: 'fa-clipboard-list',           // 菜单图标
            title: '盘点记录',                   // 菜单标题
            desc: '物资盘点与记录'               // 菜单描述
        }
    ],
    
    /**
     * 医护人员菜单
     * 包含急救车物资概览、物资使用登记、异常报告等操作功能
     */
    doctor: [
        { 
            icon: 'fa-ambulance',                // 菜单图标
            title: '急救车物资概览',             // 菜单标题
            desc: '查看急救车状态及物资概览'     // 菜单描述
        },
        { 
            icon: 'fa-truck-loading',            // 菜单图标
            title: '物资出库/使用登记',          // 菜单标题
            desc: '记录急救物资出库和使用'       // 菜单描述
        },
        { 
            icon: 'fa-file-invoice',             // 菜单图标
            title: '物资申领/补充申请',          // 菜单标题
            desc: '提交物资申领或补充请求'       // 菜单描述
        },
        { 
            icon: 'fa-exclamation-triangle',     // 菜单图标
            title: '物资异常报告',               // 菜单标题
            desc: '报告物资损坏、丢失或过期'     // 菜单描述
        },
        { 
            icon: 'fa-history',                  // 菜单图标
            title: '物资使用历史',               // 菜单标题
            desc: '查看急救物资使用历史记录'     // 菜单描述
        },
        { 
            icon: 'fa-bell',                     // 菜单图标
            title: '物资有效期预警',             // 菜单标题
            desc: '查看即将过期或已过期物资'     // 菜单描述
        },
        { 
            icon: 'fa-warehouse',                // 菜单图标
            title: '物资库存预警',               // 菜单标题
            desc: '查看库存不足的物资'           // 菜单描述
        },
        { 
            icon: 'fa-info-circle',              // 菜单图标
            title: '物资资料查询',               // 菜单标题
            desc: '查询物资详细信息和说明'       // 菜单描述
        }
    ]
};

window.addEventListener('DOMContentLoaded', function() {
  // 检查用户是否已登录
  const currentUser = localStorage.getItem('currentUser');
  if (!currentUser) {
    window.location.href = 'login.html';
    return;
  }

  try {
    const userInfo = JSON.parse(currentUser);
    if (!userInfo || !userInfo.role || !userInfo.sessionId) {
      throw new Error('Invalid user info');
    }

    // 检查会话是否过期
    const currentTime = new Date().getTime();
    const loginTime = userInfo.loginTime;
    const expiresIn = userInfo.expiresIn;
    
    if (currentTime - loginTime > expiresIn) {
      // 会话已过期，清除用户信息并重定向到登录页
      localStorage.removeItem('currentUser');
      window.location.href = 'login.html';
      return;
    }

    // 更新登录时间，延长会话
    userInfo.loginTime = currentTime;
    localStorage.setItem('currentUser', JSON.stringify(userInfo));
  } catch (error) {
    localStorage.removeItem('currentUser');
    window.location.href = 'login.html';
    return;
  }
  
  // 隐藏loadingOverlay
  var overlay = document.getElementById('loadingOverlay');
  if (overlay) overlay.style.display = 'none';

  // 获取当前用户信息
  var userInfoSpan = document.getElementById('currentUser');
  var userInfo = JSON.parse(localStorage.getItem('currentUser'));
  
  // 显示用户信息
  if (userInfoSpan && userInfo) {
    const roleMap = {
      'admin': '系统管理员',
      'manager': '物资管理人员',
      'doctor': '医护人员',
      'leader': '科室负责人'
    };
    const roleText = roleMap[userInfo.role] || userInfo.role;
    userInfoSpan.innerHTML = `<i class="fas fa-user-circle me-2"></i>${userInfo.name}（${roleText}）`;
  }

  // 页面内容占位
  var pages = {
    dashboard: `
      <div class="system-overview" id="system-overview"></div>
      <div class="recent-logs" id="recent-logs"></div>
    `,
  };

  // 渲染权限菜单卡片
  var menuCards = document.getElementById('menuCards');
  if (menuCards && window.mockMenus && userInfo.role) {
    var menus = window.mockMenus[userInfo.role] || [];
    menuCards.innerHTML = menus.map((menu, idx) => `
      <div class="menu-card" data-menu-idx="${idx}">
        <div class="menu-icon"><i class="fas ${menu.icon}"></i></div>
        <div class="menu-title">${menu.title}</div>
        <div class="menu-desc">${menu.desc}</div>
      </div>
    `).join('');
  }

  // 渲染侧边栏
  var sidebar = document.querySelector('.sidebar ul.nav');
  if (sidebar && window.mockMenus && userInfo.role) {
    var menus = window.mockMenus[userInfo.role] || [];
    // 首页始终显示
    var sidebarHtml = `<li class="nav-item">
      <a class="nav-link active" href="#" data-page="dashboard">
        <i class="fas fa-home me-2"></i>首页
      </a>
    </li>`;
    // 新增：菜单title到data-page的映射
    if(userInfo.role === 'admin'){
      // 如果用户是admin，则显示用户管理、权限管理、系统配置
    const pageMap = {
      '用户管理': 'user-management',
      '权限管理': 'permission-management',
      '系统配置': 'system-config'
    };
    sidebarHtml += menus.map((menu, idx) => `
      <li class="nav-item">
        <a class="nav-link" href="#" 
          ${pageMap[menu.title] ? `data-page=\"${pageMap[menu.title]}\"` : ''}
          data-menu-idx="${idx}">
          <i class="fas ${menu.icon} me-2"></i>${menu.title}
        </a>
      </li>
    `).join('');
    sidebar.innerHTML = sidebarHtml;
    }else if(userInfo.role === 'doctor'){
      // 如果用户是doctor，则显示医护人员专属菜单
      const pageMap = {
        '急救车物资概览': 'ambulance-overview',
        '物资出库/使用登记': 'material-outbound-registration',
        '物资申领/补充申请': 'material-requisition',
        '物资异常报告': 'material-exception-report',
        '物资使用历史': 'material-usage-history',
        '物资有效期预警': 'material-expiry-alerts',
        '物资库存预警': 'material-inventory-alerts',
        '物资资料查询': 'material-data-query'
      };

      sidebarHtml += menus.map((menu, idx) => `
        <li class="nav-item">
          <a class="nav-link" href="#" 
            ${pageMap[menu.title] ? `data-page=\"${pageMap[menu.title]}\"` : ''}
            data-menu-idx="${idx}">
            <i class="fas ${menu.icon} me-2"></i>${menu.title}
          </a>
        </li>
      `).join('');
      sidebar.innerHTML = sidebarHtml;
    }else if(userInfo.role === 'manager'){
      // 如果用户是manager，则显示物资管理人员专属菜单
      const pageMap = {
        '急救车物资配置': 'manager-ambulance-config',
        '物资信息管理': 'manager-material-info-management',
        '物资库存管理': 'manager-inventory-management',
        '急救车补充管理': 'manager-ambulance-replenishment',
        '盘点记录': 'manager-inventory-records'
      };

      sidebarHtml += menus.map((menu, idx) => `
        <li class="nav-item">
          <a class="nav-link" href="#" 
            ${pageMap[menu.title] ? `data-page=\"${pageMap[menu.title]}\"` : ''}
            data-menu-idx="${idx}">
            <i class="fas ${menu.icon} me-2"></i>${menu.title}
          </a>
        </li>
      `).join('');
      sidebar.innerHTML = sidebarHtml;
    }
  }

  // 根据用户角色加载对应的JS和CSS文件
  if (userInfo.role === 'admin') {
    // 动态加载 admin.css
    var link = document.createElement('link');
    link.rel = 'stylesheet';
    link.href = '../css/admin.css';
    document.head.appendChild(link);
    // 动态加载 admin.js
    var script = document.createElement('script');
    script.src = '../js/admin.js';
    document.body.appendChild(script);
    // 动态加载后自动渲染首页内容
    var checkDashboardLoaded = setInterval(function() {
      if (window.renderDashboard) {
        clearInterval(checkDashboardLoaded);
        window.renderDashboard();
      }
    }, 100);
  } else if (userInfo.role === 'doctor') {
    // 动态加载 doctor.css
    var link = document.createElement('link');
    link.rel = 'stylesheet';
    link.href = '../css/doctor.css';
    document.head.appendChild(link);
    // 动态加载 doctor.js
    var script = document.createElement('script');
    script.src = '../js/doctor.js';
    document.body.appendChild(script);
    // 动态加载后自动渲染首页内容
    var checkDoctorDashboardLoaded = setInterval(function() {
      if (window.renderDashboard) { // 检查 doctor.js 中定义的 renderDashboard 是否加载
        clearInterval(checkDoctorDashboardLoaded);
        window.renderDashboard();
      }
    }, 100);
  } else if (userInfo.role === 'manager') {
    // 动态加载 manager.css
    var link = document.createElement('link');
    link.rel = 'stylesheet';
    link.href = '../css/manager.css';
    document.head.appendChild(link);
    // 动态加载 manager.js
    var script = document.createElement('script');
    script.src = '../js/manager.js';
    document.body.appendChild(script);
    // 动态加载后自动渲染首页内容
    var checkManagerDashboardLoaded = setInterval(function() {
      if (window.renderDashboardManager) {
        clearInterval(checkManagerDashboardLoaded);
        window.renderDashboardManager();
      }
    }, 100);
  } else {
    showPage('dashboard');
  }

  // 页面切换逻辑
  var contentArea = document.getElementById('contentArea');
  var pageTitleElement = document.getElementById('pageTitle');

  // 添加路由拦截器
  function checkAuth(pageKey) {
    const userInfo = JSON.parse(localStorage.getItem('currentUser'));
    if (!userInfo) {
      window.location.href = 'login.html';
      return false;
    }

    // 检查会话是否过期
    const currentTime = new Date().getTime();
    if (currentTime - userInfo.loginTime > userInfo.expiresIn) {
      localStorage.removeItem('currentUser');
      window.location.href = 'login.html';
      return false;
    }

    // 检查页面访问权限
    const roleMenus = window.mockMenus[userInfo.role] || [];
    const hasPermission = roleMenus.some(menu => {
      const pageMap = getPageMap(userInfo.role);
      return pageMap[menu.title] === pageKey;
    });

    if (!hasPermission && pageKey !== 'dashboard') {
      showToast('您没有权限访问该页面', 'error');
      return false;
    }

    return true;
  }

  // 获取角色对应的页面映射
  function getPageMap(role) {
    switch(role) {
      case 'admin':
        return {
          '用户管理': 'user-management',
          '权限管理': 'permission-management',
          '系统配置': 'system-config'
        };
      case 'doctor':
        return {
          '急救车物资概览': 'ambulance-overview',
          '物资出库/使用登记': 'material-outbound-registration',
          '物资申领/补充申请': 'material-requisition',
          '物资异常报告': 'material-exception-report',
          '物资使用历史': 'material-usage-history',
          '物资有效期预警': 'material-expiry-alerts',
          '物资库存预警': 'material-inventory-alerts',
          '物资资料查询': 'material-data-query'
        };
      case 'manager':
        return {
          '急救车物资配置': 'manager-ambulance-config',
          '物资信息管理': 'manager-material-info-management',
          '物资库存管理': 'manager-inventory-management',
          '急救车补充管理': 'manager-ambulance-replenishment',
          '盘点记录': 'manager-inventory-records'
        };
      default:
        return {};
    }
  }

  function showPage(pageKey, menuObj) {
    // 检查权限
    if (!checkAuth(pageKey)) {
      return;
    }

    var menuCards = document.getElementById('menuCards');
    if (contentArea) {
      // 每次切换页面时，先清空内容区域
      contentArea.innerHTML = '';

      // 更新页面标题
      if (pageTitleElement) {
        let title = '首页';
        let icon = 'fas fa-home';

        // 根据 pageKey 查找对应的菜单项
        let currentMenu = null;
        if (userInfo.role && window.mockMenus[userInfo.role]) {
          const menuData = window.mockMenus[userInfo.role];
          // 检查侧边栏的 pageMap
          if (userInfo.role === 'admin') {
            const pageMap = {
              '用户管理': 'user-management',
              '权限管理': 'permission-management',
              '系统配置': 'system-config'
            };
            for (const menu of menuData) {
              if (pageMap[menu.title] === pageKey) {
                currentMenu = menu;
                break;
              }
            }
          } else if (userInfo.role === 'doctor') {
            const pageMap = {
              '急救车物资概览': 'ambulance-overview',
              '物资出库/使用登记': 'material-outbound-registration',
              '物资申领/补充申请': 'material-requisition',
              '物资异常报告': 'material-exception-report',
              '物资使用历史': 'material-usage-history',
              '物资有效期预警': 'material-expiry-alerts',
              '物资库存预警': 'material-inventory-alerts',
              '物资资料查询': 'material-data-query'
            };
            for (const menu of menuData) {
              if (pageMap[menu.title] === pageKey) {
                currentMenu = menu;
                break;
              }
            }
          } else if (userInfo.role === 'manager') {
            const pageMap = {
              '急救车物资配置': 'manager-ambulance-config',
              '物资信息管理': 'manager-material-info-management',
              '物资库存管理': 'manager-inventory-management',
              '急救车补充管理': 'manager-ambulance-replenishment',
              '盘点记录': 'manager-inventory-records'
            };
            for (const menu of menuData) {
              if (pageMap[menu.title] === pageKey) {
                currentMenu = menu;
                break;
              }
            }
          }
        }

        if (pageKey !== 'dashboard' && currentMenu) {
          title = currentMenu.title;
          icon = `fas ${currentMenu.icon}`;
        }

        pageTitleElement.innerHTML = `<i class="${icon} me-2"></i>${title}`;
      }

      // 控制卡片区显示/隐藏
      if (pageKey === 'dashboard') {
        if (menuCards) {
          // 在首页才渲染和显示菜单卡片
          var menus = window.mockMenus[userInfo.role] || [];
          menuCards.innerHTML = menus.map((menu, idx) => `
            <a class="menu-card" href="#" data-page="${getMenuPageKey(userInfo.role, menu.title)}" data-menu-idx="${idx}">
              <div class="menu-icon"><i class="fas ${menu.icon}"></i></div>
              <div class="menu-title">${menu.title}</div>
              <div class="menu-desc">${menu.desc}</div>
            </a>
          `).join('');
          menuCards.style.display = '';
        }
      } else {
        if (menuCards) menuCards.style.display = 'none';
      }

      // 根据 pageKey 渲染内容
      if (pageKey === 'dashboard') {
        if (window.renderDashboard && (userInfo.role === 'doctor' || userInfo.role === 'admin')) { // 医生和管理员都有综合概览
          window.renderDashboard();
        } else if (window.renderDashboardManager && userInfo.role === 'manager') { // 物资管理员有自己的首页标题
          window.renderDashboardManager();
        } else {
          contentArea.innerHTML = pages.dashboard; // 其他角色或通用仪表盘
        }
      } else if (pageKey === 'user-management' && userInfo.role === 'admin') {
        if (window.renderUserManagement) {
          window.renderUserManagement();
        } else {
          contentArea.innerHTML = '<div class="page-placeholder">正在加载用户管理模块...</div>';
          // 轮询检测 admin.js 是否加载完成
          var checkAdminLoaded = setInterval(function() {
            if (window.renderUserManagement) {
              clearInterval(checkAdminLoaded);
              window.renderUserManagement();
            }
          }, 100);
        }
      } else if (pageKey === 'permission-management' && userInfo.role === 'admin') {
        if (window.renderPermissionManagement) {
          window.renderPermissionManagement();
        } else {
          contentArea.innerHTML = '<div class="page-placeholder">正在加载权限管理模块...</div>';
          // 轮询检测 admin.js 是否加载完成
          var checkAdminLoaded = setInterval(function() {
            if (window.renderPermissionManagement) {
              clearInterval(checkAdminLoaded);
              window.renderPermissionManagement();
            }
          }, 100);
        }
      } else if (pageKey === 'system-config' && userInfo.role === 'admin') {
        if (window.renderSystemConfig) {
          window.renderSystemConfig();
        } else {
          contentArea.innerHTML = '<div class="page-placeholder">正在加载系统配置模块...</div>';
          var checkAdminLoaded = setInterval(function() {
            if (window.renderSystemConfig) {
              clearInterval(checkAdminLoaded);
              window.renderSystemConfig();
            }
          }, 100);
        }
      } else if (userInfo.role === 'doctor') {
        // 医生角色的页面加载逻辑，与admin保持一致
        const doctorRenderFunctions = {
          'ambulance-overview': window.renderAmbulanceOverview,
          'material-outbound-registration': window.renderMaterialOutboundRegistration,
          'material-requisition': window.renderMaterialRequisition,
          'material-exception-report': window.renderMaterialExceptionReport,
          'material-usage-history': window.renderMaterialUsageHistory,
          'material-expiry-alerts': window.renderMaterialExpiryAlerts,
          'material-inventory-alerts': window.renderMaterialInventoryAlerts,
          'material-data-query': window.renderMaterialDataQuery
        };

        if (doctorRenderFunctions[pageKey]) {
          doctorRenderFunctions[pageKey]();
        } else if (window[`render${pageKey.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('')}`]) { // Fallback for cases where function might be directly on window before being assigned to doctorRenderFunctions
            window[`render${pageKey.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('')}`]();
        }else {
          contentArea.innerHTML = `<div class="page-placeholder">正在加载${pageKey}模块...</div>`;
          // 轮询检测 doctor.js 中对应的渲染函数是否加载完成
          var checkDoctorLoaded = setInterval(function() {
            const func = window[`render${pageKey.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('')}`];
            if (func) {
              clearInterval(checkDoctorLoaded);
              func();
            }
          }, 100);
        }
      } else if (userInfo.role === 'manager') {
        // 管理角色的页面加载逻辑，与admin保持一致
        const managerRenderFunctions = {
          'dashboard': window.renderDashboardManager,
          'manager-ambulance-config': window.renderManagerAmbulanceConfig,
          'manager-material-info-management': window.renderManagerMaterialInfoManagement,
          'manager-inventory-management': window.renderManagerInventoryManagement,
          'manager-ambulance-replenishment': window.renderManagerAmbulanceReplenishment,
          'manager-inventory-records': window.renderManagerInventoryRecords
        };

        if (managerRenderFunctions[pageKey]) {
          managerRenderFunctions[pageKey]();
        } else {
          contentArea.innerHTML = '<div class="page-placeholder">功能开发中...</div>';
        }
      } else if (menuObj) {
        contentArea.innerHTML = `<div class='page-placeholder'><h4>${menuObj.title}</h4><p>${menuObj.desc}</p></div>`;
      } else {
        contentArea.innerHTML = '<div class="page-placeholder">功能开发中...</div>';
      }

      // 处理从卡片点击的页面跳转
      var pageKeyToLoad = pageKey;
      if (menuObj && !pageKey) { // 如果是点击卡片，且没有data-page，则从mockMenus中获取
        pageKeyToLoad = getMenuPageKey(userInfo.role, menuObj.title);
      }

      // 辅助函数：根据角色和菜单标题获取对应的 pageKey
      function getMenuPageKey(roleKey, menuTitle) {
        const pageMaps = {
          'admin': {
            '用户管理': 'user-management',
            '权限管理': 'permission-management',
            '系统配置': 'system-config'
          },
          'doctor': {
            '急救车物资概览': 'ambulance-overview',
            '物资出库/使用登记': 'material-outbound-registration',
            '物资申领/补充申请': 'material-requisition',
            '物资异常报告': 'material-exception-report',
            '物资使用历史': 'material-usage-history',
            '物资有效期预警': 'material-expiry-alerts',
            '物资库存预警': 'material-inventory-alerts',
            '物资资料查询': 'material-data-query'
          },
          'manager': {
            '急救车物资配置': 'manager-ambulance-config',
            '物资信息管理': 'manager-material-info-management',
            '物资库存管理': 'manager-inventory-management',
            '急救车补充管理': 'manager-ambulance-replenishment',
            '盘点记录': 'manager-inventory-records'
          }
        };
        return pageMaps[roleKey]?.[menuTitle] || menuTitle.replace(/\s|\//g, '-').toLowerCase();
      }
    }
  }

  // 页面加载完成后，根据 URL hash 渲染对应页面，否则默认显示 dashboard
  var initialPageKey = window.location.hash.substring(1);
  if (initialPageKey) {
    showPage(initialPageKey);
  } else {
    showPage('dashboard');
  }

  // 侧边栏和卡片点击事件
  document.querySelector('.sidebar ul.nav').addEventListener('click', function(e) {
    const target = e.target.closest('.nav-link');
    if (target) {
      e.preventDefault();
      document.querySelectorAll('.nav-link').forEach(link => link.classList.remove('active'));
      target.classList.add('active');
      showPage(target.dataset.page);
    }
  });

  // 在这里添加 menuCards 的事件监听器，因为它们现在是动态生成的
  document.getElementById('mainHomeArea').addEventListener('click', function(e) {
    const target = e.target.closest('.menu-card');
    if (target) {
      e.preventDefault();
      const pageKey = target.dataset.page;
      // 同步更新侧边栏高亮
      document.querySelectorAll('.nav-link').forEach(link => {
        if (link.dataset.page === pageKey) {
          link.classList.add('active');
        } else {
          link.classList.remove('active');
        }
      });
      showPage(pageKey, { title: target.querySelector('.menu-title').textContent });
    }
  });

  // 添加退出登录功能
  const logoutBtn = document.getElementById('logoutBtn');
  if (logoutBtn) {
    logoutBtn.addEventListener('click', function() {
      localStorage.removeItem('currentUser');
      window.location.href = 'login.html';
    });
  }
});
 